package com.example.work.Excel;

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeParseException;
import java.util.regex.Pattern;

public class DateUtils {
    // 线程安全的格式化器
    private static final DateTimeFormatter STANDARD_FORMATTER = 
        DateTimeFormatter.ofPattern("yyyyMMddHHmmss");
    
    // 数字正则表达式
    private static final Pattern DIGITS_PATTERN = Pattern.compile("\\D+");
    
    /**
     * 清理日期字符串，移除所有非数字字符
     * @param dateStr 原始日期字符串
     * @return 清理后的纯数字字符串
     */
    private static String cleanDateString(String dateStr) {
        if (dateStr == null) {
            return null;
        }
        return DIGITS_PATTERN.matcher(dateStr).replaceAll("");
    }
    
    /**
     * 验证并格式化为标准 yyyyMMddHHmmss 格式
     * @param dateStr 日期字符串（可包含分隔符）
     * @return 格式化后的字符串
     * @throws DateTimeParseException 如果格式无效
     * @throws IllegalArgumentException 如果清理后长度不为14
     */
    public static String formatToStandard(String dateStr) {
        // 清理字符串
        String cleaned = cleanDateString(dateStr);
        
        // 验证长度
        if (cleaned == null || cleaned.length() != 14) {
            throw new IllegalArgumentException(
                "清理后的日期字符串长度必须为14位，实际: " + 
                (cleaned == null ? "null" : cleaned.length()));
        }
        
        // 解析并格式化
        LocalDateTime dateTime = LocalDateTime.parse(cleaned, STANDARD_FORMATTER);
        return dateTime.format(STANDARD_FORMATTER);
    }
    
    /**
     * 转换为指定格式
     * @param dateStr 原始日期字符串（可包含分隔符）
     * @param pattern 目标格式模式
     * @return 格式化后的字符串
     * @throws DateTimeParseException 如果格式无效
     * @throws IllegalArgumentException 如果清理后长度不为14
     */
    public static String convertToFormat(String dateStr, String pattern) {
        // 清理字符串
        String cleaned = cleanDateString(dateStr);
        
        // 验证长度
        if (cleaned == null || cleaned.length() != 14) {
            throw new IllegalArgumentException(
                "清理后的日期字符串长度必须为14位，实际: " + 
                (cleaned == null ? "null" : cleaned.length()));
        }
        
        // 解析并转换格式
        DateTimeFormatter targetFormatter = DateTimeFormatter.ofPattern(pattern);
        LocalDateTime dateTime = LocalDateTime.parse(cleaned, STANDARD_FORMATTER);
        return dateTime.format(targetFormatter);
    }
    
    public static void main(String[] args) {
        String input = ",20220719142010";
        
        try {
            // 验证并保持原格式
            String standard = formatToStandard(input);
            System.out.println("标准格式: " + standard);
            
            // 转换为其他格式
            String readable = convertToFormat(input, "yyyy年MM月dd日 HH:mm:ss");
            System.out.println("可读格式: " + readable);
            // 输出: 可读格式: 2022年07月19日 14:20:10
            
        } catch (DateTimeParseException e) {
            System.err.println("日期解析错误: " + e.getMessage());
        } catch (IllegalArgumentException e) {
            System.err.println("参数错误: " + e.getMessage());
        }
    }
}